using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Deployment.Application;

namespace MES
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();           
        }
        public MainForm(String username)
        {
            switch (username.Trim().ToUpper())
            {
                case "QA":
                    InitializeComponent();
                    enableQAItems();
                    break;
                case "IT4":
                    InitializeComponent();
                    enableITItems();
                    break;
                case "ADMIN":
                    InitializeComponent();
                    enableAllItems();
                    break;
                default:
                    break;
            }
        }
        private void enableQAItems()
        {
            this.WJSPCToolStripMenuItem.Enabled = false;
            this.DataVerifyToolStripMenuItem.Enabled = false;
            this.randomInformationToolStripMenuItem.Enabled = true;   
        }
        private void enableITItems()
        {
            this.WJSPCToolStripMenuItem.Enabled = false;
            this.DataVerifyToolStripMenuItem.Enabled = true;
            this.randomInformationToolStripMenuItem.Enabled = false;
        }
        private void enableAllItems()
        {
            this.WJSPCToolStripMenuItem.Enabled = true;
            this.DataVerifyToolStripMenuItem.Enabled = true;
            this.randomInformationToolStripMenuItem.Enabled = true;
        }
        private void disableMenuItems()
        {
            this.WJSPCToolStripMenuItem.Enabled = false;
            this.DataVerifyToolStripMenuItem.Enabled = false;
            this.randomInformationToolStripMenuItem.Enabled = false;
        }
        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void WJSPCToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ReplicationForm form = ReplicationForm.createInstance();
            form.MdiParent = this;
            form.Show();
            Application.DoEvents();
        }

        private void randomInformationToolStripMenuItem_Click(object sender, EventArgs e)
        {
            RandomInformaion form = RandomInformaion.createInstance();
            form.MdiParent = this;
            form.Show();
            Application.DoEvents();
        }

        private void DataVerifyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmCorrect form = frmCorrect.createInstance();
            form.MdiParent = this;
            form.Show();
            Application.DoEvents();
        }

        private void dCT2005ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form form = DCTConfig.createInstance();
            form.MdiParent = this;
            form.Show();
            Application.DoEvents();
        }

        private void updateToolStripMenuItem_Click(object sender, EventArgs e)
        {
            InstallUpdateSyncWithInfo();                
        }
        private void InstallUpdateSyncWithInfo()
        {
            UpdateCheckInfo info = null;

            if (ApplicationDeployment.IsNetworkDeployed)
            {
                ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;

                try
                {
                    info = ad.CheckForDetailedUpdate();

                }
                catch (DeploymentDownloadException dde)
                {
                    MessageBox.Show("The new version of the application cannot be downloaded at this time. \n\nPlease check your network connection, or try again later. Error: " + dde.Message);
                    return;
                }
                catch (InvalidDeploymentException ide)
                {
                    MessageBox.Show("Cannot check for a new version of the application. The ClickOnce deployment is corrupt. Please redeploy the application and try again. Error: " + ide.Message);
                    return;
                }
                catch (InvalidOperationException ioe)
                {
                    MessageBox.Show("This application cannot be updated. It is likely not a ClickOnce application. Error: " + ioe.Message);
                    return;
                }

                if (info.UpdateAvailable)
                {
                    Boolean doUpdate = true;

                    if (!info.IsUpdateRequired)
                    {
                        DialogResult dr = MessageBox.Show("An update is available. Would you like to update the application now?", "Update Available", MessageBoxButtons.OKCancel);
                        if (!(DialogResult.OK == dr))
                        {
                            doUpdate = false;
                        }
                    }
                    else
                    {
                        // Display a message that the app MUST reboot. Display the minimum required version.
                        MessageBox.Show("This application has detected a mandatory update from your current " +
                            "version to version " + info.MinimumRequiredVersion.ToString() +
                            ". The application will now install the update and restart.",
                            "Update Available", MessageBoxButtons.OK,
                            MessageBoxIcon.Information);
                    }

                    if (doUpdate)
                    {
                        try
                        {
                            ad.Update();
                            MessageBox.Show("The application has been upgraded, and will now restart.");
                            Application.Restart();
                        }
                        catch (DeploymentDownloadException dde)
                        {
                            MessageBox.Show("Cannot install the latest version of the application. \n\nPlease check your network connection, or try again later. Error: " + dde);
                            return;
                        }
                    }
                }
            }
        }

    }
}